package yz.com.javautil.astaralgorithm;

import java.util.Vector;

/**
 * AStar算法图结构
 *
 * @author csdn
 */
public interface AStarGraph<V> {
    /**
     * 边数量
     *
     * @return 边数量
     */
    int edgesSize();

    /**
     * 顶点数量
     *
     * @return 顶点数量
     */
    int verticesSize();

    /**
     * 增加一个顶点
     *
     * @param v 顶点数据
     */
    void addVertex(V v);

    /**
     * 增加一条带权值的边并保留座标点数据
     * 权值weight为G
     * Coordinate为终点座标用于计算H
     *
     * @param from                起点
     * @param to                  终点
     * @param weightAndCoordinate 权值和终点座标
     */
    void addEdge(V from, V to, String weightAndCoordinate);

    /**
     * 删除一条边
     *
     * @param from 起点
     * @param to   终点
     */
    void removeEdge(V from, V to);

    /**
     * 删除某个顶点
     *
     * @param v 被删除顶点的序号
     */
    void removeVertex(V v);

    /**
     * 显示一个图
     */
    void displayGraph();

    /**
     * 返回顶点v的度
     *
     * @param v 顶点的序号
     * @return 度
     */
    int degree(V v);

    /**
     * 返回图中一个顶点的所有邻边
     *
     * @param v 顶点
     * @return 临边
     */
    Vector<Integer> getAdjacentEdge(int v);

    /**
     * 获取路径
     *
     * @param v0 起始点
     * @param vi 终止点
     * @return 路径index
     */
    Vector<Integer> getPath(V v0, V vi);

}
